<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-pragma">{-# LANGUAGE BangPatterns #-}</span><span>
</span><span id="line-2"></span><span class="hs-pragma">{-# LANGUAGE FlexibleContexts #-}</span><span>
</span><span id="line-3"></span><span class="hs-pragma">{-# LANGUAGE GADTs #-}</span><span>
</span><span id="line-4"></span><span class="hs-pragma">{-# LANGUAGE ScopedTypeVariables #-}</span><span>
</span><span id="line-5"></span><span>
</span><span id="line-6"></span><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.Cmm.Liveness</span><span>
</span><span id="line-7"></span><span>    </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLocalLive"><span class="hs-identifier">CmmLocalLive</span></a></span><span>
</span><span id="line-8"></span><span>    </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#cmmLocalLiveness"><span class="hs-identifier">cmmLocalLiveness</span></a></span><span>
</span><span id="line-9"></span><span>    </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#cmmGlobalLiveness"><span class="hs-identifier">cmmGlobalLiveness</span></a></span><span>
</span><span id="line-10"></span><span>    </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#liveLattice"><span class="hs-identifier">liveLattice</span></a></span><span>
</span><span id="line-11"></span><span>    </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#gen_kill"><span class="hs-identifier">gen_kill</span></a></span><span>
</span><span id="line-12"></span><span>    </span><span class="hs-special">)</span><span>
</span><span id="line-13"></span><span class="hs-keyword">where</span><span>
</span><span id="line-14"></span><span>
</span><span id="line-15"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span>
</span><span id="line-16"></span><span>
</span><span id="line-17"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html"><span class="hs-identifier">GHC.Driver.Session</span></a></span><span>
</span><span id="line-18"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html"><span class="hs-identifier">GHC.Cmm.BlockId</span></a></span><span>
</span><span id="line-19"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.html"><span class="hs-identifier">GHC.Cmm</span></a></span><span>
</span><span id="line-20"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Ppr.Expr.html"><span class="hs-identifier">GHC.Cmm.Ppr.Expr</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- For Outputable instances</span><span>
</span><span id="line-21"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Block</span></a></span><span>
</span><span id="line-22"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Collections.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Collections</span></a></span><span>
</span><span id="line-23"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.html"><span class="hs-identifier">GHC.Cmm.Dataflow</span></a></span><span>
</span><span id="line-24"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Label.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Label</span></a></span><span>
</span><span id="line-25"></span><span>
</span><span id="line-26"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.Maybe.html"><span class="hs-identifier">GHC.Data.Maybe</span></a></span><span>
</span><span id="line-27"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Outputable.html"><span class="hs-identifier">GHC.Utils.Outputable</span></a></span><span>
</span><span id="line-28"></span><span>
</span><span id="line-29"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-30"></span><span class="hs-comment">-- Calculating what variables are live on entry to a basic block</span><span>
</span><span id="line-31"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-32"></span><span>
</span><span id="line-33"></span><span class="hs-comment">-- | The variables live on entry to a block</span><span>
</span><span id="line-34"></span><span class="hs-keyword">type</span><span> </span><span id="CmmLive"><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-identifier hs-var">CmmLive</span></a></span></span><span> </span><span id="local-6989586621681045832"><span class="annot"><a href="#local-6989586621681045832"><span class="hs-identifier hs-type">r</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#RegSet"><span class="hs-identifier hs-type">RegSet</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045832"><span class="hs-identifier hs-type">r</span></a></span><span>
</span><span id="line-35"></span><span class="hs-keyword">type</span><span> </span><span id="CmmLocalLive"><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLocalLive"><span class="hs-identifier hs-var">CmmLocalLive</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-identifier hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#LocalReg"><span class="hs-identifier hs-type">LocalReg</span></a></span><span>
</span><span id="line-36"></span><span>
</span><span id="line-37"></span><span class="hs-comment">-- | The dataflow lattice</span><span>
</span><span id="line-38"></span><span id="local-6989586621681045933"><span class="annot"><a href="GHC.Cmm.Liveness.html#liveLattice"><span class="hs-identifier hs-type">liveLattice</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><span class="hs-identifier hs-type">Ord</span></span><span> </span><span class="annot"><a href="#local-6989586621681045933"><span class="hs-identifier hs-type">r</span></a></span><span> </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.html#DataflowLattice"><span class="hs-identifier hs-type">DataflowLattice</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-identifier hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045933"><span class="hs-identifier hs-type">r</span></a></span><span class="hs-special">)</span></span><span>
</span><span id="line-39"></span><span class="hs-pragma">{-# SPECIALIZE</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#liveLattice"><span class="hs-pragma hs-type">liveLattice</span></a></span><span> </span><span class="hs-pragma">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.html#DataflowLattice"><span class="hs-pragma hs-type">DataflowLattice</span></a></span><span> </span><span class="hs-pragma">(</span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-pragma hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#LocalReg"><span class="hs-pragma hs-type">LocalReg</span></a></span><span class="hs-pragma">)</span><span> </span><span class="hs-pragma">#-}</span><span>
</span><span id="line-40"></span><span class="hs-pragma">{-# SPECIALIZE</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#liveLattice"><span class="hs-pragma hs-type">liveLattice</span></a></span><span> </span><span class="hs-pragma">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.html#DataflowLattice"><span class="hs-pragma hs-type">DataflowLattice</span></a></span><span> </span><span class="hs-pragma">(</span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-pragma hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-pragma hs-type">GlobalReg</span></a></span><span class="hs-pragma">)</span><span> </span><span class="hs-pragma">#-}</span><span>
</span><span id="line-41"></span><span id="liveLattice"><span class="annot"><span class="annottext">liveLattice :: forall r. Ord r =&gt; DataflowLattice (CmmLive r)
</span><a href="GHC.Cmm.Liveness.html#liveLattice"><span class="hs-identifier hs-var hs-var">liveLattice</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">RegSet r -&gt; JoinFun (RegSet r) -&gt; DataflowLattice (RegSet r)
forall a. a -&gt; JoinFun a -&gt; DataflowLattice a
</span><a href="GHC.Cmm.Dataflow.html#DataflowLattice"><span class="hs-identifier hs-var">DataflowLattice</span></a></span><span> </span><span class="annot"><span class="annottext">RegSet r
forall r. RegSet r
</span><a href="GHC.Cmm.Expr.html#emptyRegSet"><span class="hs-identifier hs-var">emptyRegSet</span></a></span><span> </span><span class="annot"><span class="annottext">JoinFun (RegSet r)
forall {r}.
Ord r =&gt;
OldFact (RegSet r) -&gt; NewFact (RegSet r) -&gt; JoinedFact (RegSet r)
</span><a href="#local-6989586621681045827"><span class="hs-identifier hs-var">add</span></a></span><span>
</span><span id="line-42"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-43"></span><span>    </span><span id="local-6989586621681045827"><span class="annot"><span class="annottext">add :: OldFact (RegSet r) -&gt; NewFact (RegSet r) -&gt; JoinedFact (RegSet r)
</span><a href="#local-6989586621681045827"><span class="hs-identifier hs-var hs-var">add</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Dataflow.html#OldFact"><span class="hs-identifier hs-type">OldFact</span></a></span><span> </span><span id="local-6989586621681045821"><span class="annot"><span class="annottext">RegSet r
</span><a href="#local-6989586621681045821"><span class="hs-identifier hs-var">old</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Dataflow.html#NewFact"><span class="hs-identifier hs-type">NewFact</span></a></span><span> </span><span id="local-6989586621681045819"><span class="annot"><span class="annottext">RegSet r
</span><a href="#local-6989586621681045819"><span class="hs-identifier hs-var">new</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-44"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621681045818"><span class="annot"><span class="annottext">join :: RegSet r
</span><a href="#local-6989586621681045818"><span class="hs-identifier hs-var hs-var">join</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">RegSet r -&gt; RegSet r -&gt; RegSet r
forall r. Ord r =&gt; RegSet r -&gt; RegSet r -&gt; RegSet r
</span><a href="GHC.Cmm.Expr.html#plusRegSet"><span class="hs-identifier hs-var">plusRegSet</span></a></span><span> </span><span class="annot"><span class="annottext">RegSet r
</span><a href="#local-6989586621681045821"><span class="hs-identifier hs-var">old</span></a></span><span> </span><span class="annot"><span class="annottext">RegSet r
</span><a href="#local-6989586621681045819"><span class="hs-identifier hs-var">new</span></a></span><span>
</span><span id="line-45"></span><span>        </span><span class="hs-keyword">in</span><span> </span><span class="annot"><span class="annottext">Bool -&gt; RegSet r -&gt; JoinedFact (RegSet r)
forall a. Bool -&gt; a -&gt; JoinedFact a
</span><a href="GHC.Cmm.Dataflow.html#changedIf"><span class="hs-identifier hs-var">changedIf</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">RegSet r -&gt; Int
forall r. RegSet r -&gt; Int
</span><a href="GHC.Cmm.Expr.html#sizeRegSet"><span class="hs-identifier hs-var">sizeRegSet</span></a></span><span> </span><span class="annot"><span class="annottext">RegSet r
</span><a href="#local-6989586621681045818"><span class="hs-identifier hs-var">join</span></a></span><span> </span><span class="annot"><span class="annottext">Int -&gt; Int -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&gt;</span></span><span> </span><span class="annot"><span class="annottext">RegSet r -&gt; Int
forall r. RegSet r -&gt; Int
</span><a href="GHC.Cmm.Expr.html#sizeRegSet"><span class="hs-identifier hs-var">sizeRegSet</span></a></span><span> </span><span class="annot"><span class="annottext">RegSet r
</span><a href="#local-6989586621681045821"><span class="hs-identifier hs-var">old</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">RegSet r
</span><a href="#local-6989586621681045818"><span class="hs-identifier hs-var">join</span></a></span><span>
</span><span id="line-46"></span><span>
</span><span id="line-47"></span><span class="hs-comment">-- | A mapping from block labels to the variables live on entry</span><span>
</span><span id="line-48"></span><span class="hs-keyword">type</span><span> </span><span id="BlockEntryLiveness"><span class="annot"><a href="GHC.Cmm.Liveness.html#BlockEntryLiveness"><span class="hs-identifier hs-var">BlockEntryLiveness</span></a></span></span><span> </span><span id="local-6989586621681045813"><span class="annot"><a href="#local-6989586621681045813"><span class="hs-identifier hs-type">r</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Label.html#LabelMap"><span class="hs-identifier hs-type">LabelMap</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-identifier hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045813"><span class="hs-identifier hs-type">r</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-49"></span><span>
</span><span id="line-50"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-51"></span><span class="hs-comment">-- | Calculated liveness info for a CmmGraph</span><span>
</span><span id="line-52"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-53"></span><span>
</span><span id="line-54"></span><span class="annot"><a href="GHC.Cmm.Liveness.html#cmmLocalLiveness"><span class="hs-identifier hs-type">cmmLocalLiveness</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmGraph"><span class="hs-identifier hs-type">CmmGraph</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#BlockEntryLiveness"><span class="hs-identifier hs-type">BlockEntryLiveness</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#LocalReg"><span class="hs-identifier hs-type">LocalReg</span></a></span><span>
</span><span id="line-55"></span><span id="cmmLocalLiveness"><span class="annot"><span class="annottext">cmmLocalLiveness :: DynFlags -&gt; CmmGraph -&gt; BlockEntryLiveness LocalReg
</span><a href="GHC.Cmm.Liveness.html#cmmLocalLiveness"><span class="hs-identifier hs-var hs-var">cmmLocalLiveness</span></a></span></span><span> </span><span id="local-6989586621681045812"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045812"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681045811"><span class="annot"><span class="annottext">CmmGraph
</span><a href="#local-6989586621681045811"><span class="hs-identifier hs-var">graph</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-56"></span><span>    </span><span class="annot"><span class="annottext">BlockEntryLiveness LocalReg -&gt; BlockEntryLiveness LocalReg
</span><a href="#local-6989586621681045810"><span class="hs-identifier hs-var">check</span></a></span><span> </span><span class="annot"><span class="annottext">(BlockEntryLiveness LocalReg -&gt; BlockEntryLiveness LocalReg)
-&gt; BlockEntryLiveness LocalReg -&gt; BlockEntryLiveness LocalReg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">DataflowLattice (CmmLive LocalReg)
-&gt; TransferFun (CmmLive LocalReg)
-&gt; CmmGraph
-&gt; BlockEntryLiveness LocalReg
-&gt; BlockEntryLiveness LocalReg
forall f.
DataflowLattice f
-&gt; TransferFun f -&gt; CmmGraph -&gt; FactBase f -&gt; FactBase f
</span><a href="GHC.Cmm.Dataflow.html#analyzeCmmBwd"><span class="hs-identifier hs-var">analyzeCmmBwd</span></a></span><span> </span><span class="annot"><span class="annottext">DataflowLattice (CmmLive LocalReg)
forall r. Ord r =&gt; DataflowLattice (CmmLive r)
</span><a href="GHC.Cmm.Liveness.html#liveLattice"><span class="hs-identifier hs-var">liveLattice</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; TransferFun (CmmLive LocalReg)
forall r.
(UserOfRegs r (CmmNode O O), DefinerOfRegs r (CmmNode O O),
 UserOfRegs r (CmmNode O C), DefinerOfRegs r (CmmNode O C)) =&gt;
DynFlags -&gt; TransferFun (CmmLive r)
</span><a href="GHC.Cmm.Liveness.html#xferLive"><span class="hs-identifier hs-var">xferLive</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045812"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmGraph
</span><a href="#local-6989586621681045811"><span class="hs-identifier hs-var">graph</span></a></span><span> </span><span class="annot"><span class="annottext">BlockEntryLiveness LocalReg
forall (map :: * -&gt; *) a. IsMap map =&gt; map a
</span><a href="GHC.Cmm.Dataflow.Collections.html#mapEmpty"><span class="hs-identifier hs-var">mapEmpty</span></a></span><span>
</span><span id="line-57"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-58"></span><span>    </span><span id="local-6989586621681045806"><span class="annot"><span class="annottext">entry :: BlockId
</span><a href="#local-6989586621681045806"><span class="hs-identifier hs-var hs-var">entry</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmGraph -&gt; BlockId
forall (n :: Extensibility -&gt; Extensibility -&gt; *).
GenCmmGraph n -&gt; BlockId
</span><a href="GHC.Cmm.html#g_entry"><span class="hs-identifier hs-var hs-var">g_entry</span></a></span><span> </span><span class="annot"><span class="annottext">CmmGraph
</span><a href="#local-6989586621681045811"><span class="hs-identifier hs-var">graph</span></a></span><span>
</span><span id="line-59"></span><span>    </span><span id="local-6989586621681045810"><span class="annot"><span class="annottext">check :: BlockEntryLiveness LocalReg -&gt; BlockEntryLiveness LocalReg
</span><a href="#local-6989586621681045810"><span class="hs-identifier hs-var hs-var">check</span></a></span></span><span> </span><span id="local-6989586621681045804"><span class="annot"><span class="annottext">BlockEntryLiveness LocalReg
</span><a href="#local-6989586621681045804"><span class="hs-identifier hs-var">facts</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-60"></span><span>        </span><span class="annot"><span class="annottext">BlockId
-&gt; CmmLive LocalReg
-&gt; BlockEntryLiveness LocalReg
-&gt; BlockEntryLiveness LocalReg
forall a. BlockId -&gt; CmmLive LocalReg -&gt; a -&gt; a
</span><a href="GHC.Cmm.Liveness.html#noLiveOnEntry"><span class="hs-identifier hs-var">noLiveOnEntry</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681045806"><span class="hs-identifier hs-var">entry</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">String -&gt; Maybe (CmmLive LocalReg) -&gt; CmmLive LocalReg
forall a. HasCallStack =&gt; String -&gt; Maybe a -&gt; a
</span><a href="GHC.Data.Maybe.html#expectJust"><span class="hs-identifier hs-var">expectJust</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;check&quot;</span></span><span> </span><span class="annot"><span class="annottext">(Maybe (CmmLive LocalReg) -&gt; CmmLive LocalReg)
-&gt; Maybe (CmmLive LocalReg) -&gt; CmmLive LocalReg
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">KeyOf LabelMap
-&gt; BlockEntryLiveness LocalReg -&gt; Maybe (CmmLive LocalReg)
forall (map :: * -&gt; *) a.
IsMap map =&gt;
KeyOf map -&gt; map a -&gt; Maybe a
</span><a href="GHC.Cmm.Dataflow.Collections.html#mapLookup"><span class="hs-identifier hs-var">mapLookup</span></a></span><span> </span><span class="annot"><span class="annottext">KeyOf LabelMap
BlockId
</span><a href="#local-6989586621681045806"><span class="hs-identifier hs-var">entry</span></a></span><span> </span><span class="annot"><span class="annottext">BlockEntryLiveness LocalReg
</span><a href="#local-6989586621681045804"><span class="hs-identifier hs-var">facts</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">BlockEntryLiveness LocalReg
</span><a href="#local-6989586621681045804"><span class="hs-identifier hs-var">facts</span></a></span><span>
</span><span id="line-61"></span><span>
</span><span id="line-62"></span><span class="annot"><a href="GHC.Cmm.Liveness.html#cmmGlobalLiveness"><span class="hs-identifier hs-type">cmmGlobalLiveness</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmGraph"><span class="hs-identifier hs-type">CmmGraph</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#BlockEntryLiveness"><span class="hs-identifier hs-type">BlockEntryLiveness</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span>
</span><span id="line-63"></span><span id="cmmGlobalLiveness"><span class="annot"><span class="annottext">cmmGlobalLiveness :: DynFlags -&gt; CmmGraph -&gt; BlockEntryLiveness GlobalReg
</span><a href="GHC.Cmm.Liveness.html#cmmGlobalLiveness"><span class="hs-identifier hs-var hs-var">cmmGlobalLiveness</span></a></span></span><span> </span><span id="local-6989586621681045800"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045800"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681045799"><span class="annot"><span class="annottext">CmmGraph
</span><a href="#local-6989586621681045799"><span class="hs-identifier hs-var">graph</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-64"></span><span>    </span><span class="annot"><span class="annottext">DataflowLattice (CmmLive GlobalReg)
-&gt; TransferFun (CmmLive GlobalReg)
-&gt; CmmGraph
-&gt; BlockEntryLiveness GlobalReg
-&gt; BlockEntryLiveness GlobalReg
forall f.
DataflowLattice f
-&gt; TransferFun f -&gt; CmmGraph -&gt; FactBase f -&gt; FactBase f
</span><a href="GHC.Cmm.Dataflow.html#analyzeCmmBwd"><span class="hs-identifier hs-var">analyzeCmmBwd</span></a></span><span> </span><span class="annot"><span class="annottext">DataflowLattice (CmmLive GlobalReg)
forall r. Ord r =&gt; DataflowLattice (CmmLive r)
</span><a href="GHC.Cmm.Liveness.html#liveLattice"><span class="hs-identifier hs-var">liveLattice</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; TransferFun (CmmLive GlobalReg)
forall r.
(UserOfRegs r (CmmNode O O), DefinerOfRegs r (CmmNode O O),
 UserOfRegs r (CmmNode O C), DefinerOfRegs r (CmmNode O C)) =&gt;
DynFlags -&gt; TransferFun (CmmLive r)
</span><a href="GHC.Cmm.Liveness.html#xferLive"><span class="hs-identifier hs-var">xferLive</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045800"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmGraph
</span><a href="#local-6989586621681045799"><span class="hs-identifier hs-var">graph</span></a></span><span> </span><span class="annot"><span class="annottext">BlockEntryLiveness GlobalReg
forall (map :: * -&gt; *) a. IsMap map =&gt; map a
</span><a href="GHC.Cmm.Dataflow.Collections.html#mapEmpty"><span class="hs-identifier hs-var">mapEmpty</span></a></span><span>
</span><span id="line-65"></span><span>
</span><span id="line-66"></span><span class="hs-comment">-- | On entry to the procedure, there had better not be any LocalReg's live-in.</span><span>
</span><span id="line-67"></span><span id="local-6989586621681045902"><span class="annot"><a href="GHC.Cmm.Liveness.html#noLiveOnEntry"><span class="hs-identifier hs-type">noLiveOnEntry</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-identifier hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#LocalReg"><span class="hs-identifier hs-type">LocalReg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681045902"><span class="hs-identifier hs-type">a</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681045902"><span class="hs-identifier hs-type">a</span></a></span></span><span>
</span><span id="line-68"></span><span id="noLiveOnEntry"><span class="annot"><span class="annottext">noLiveOnEntry :: forall a. BlockId -&gt; CmmLive LocalReg -&gt; a -&gt; a
</span><a href="GHC.Cmm.Liveness.html#noLiveOnEntry"><span class="hs-identifier hs-var hs-var">noLiveOnEntry</span></a></span></span><span> </span><span id="local-6989586621681045790"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681045790"><span class="hs-identifier hs-var">bid</span></a></span></span><span> </span><span id="local-6989586621681045789"><span class="annot"><span class="annottext">CmmLive LocalReg
</span><a href="#local-6989586621681045789"><span class="hs-identifier hs-var">in_fact</span></a></span></span><span> </span><span id="local-6989586621681045788"><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681045788"><span class="hs-identifier hs-var">x</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-69"></span><span>  </span><span class="hs-keyword">if</span><span> </span><span class="annot"><span class="annottext">CmmLive LocalReg -&gt; Bool
forall r. RegSet r -&gt; Bool
</span><a href="GHC.Cmm.Expr.html#nullRegSet"><span class="hs-identifier hs-var">nullRegSet</span></a></span><span> </span><span class="annot"><span class="annottext">CmmLive LocalReg
</span><a href="#local-6989586621681045789"><span class="hs-identifier hs-var">in_fact</span></a></span><span> </span><span class="hs-keyword">then</span><span> </span><span class="annot"><span class="annottext">a
</span><a href="#local-6989586621681045788"><span class="hs-identifier hs-var">x</span></a></span><span>
</span><span id="line-70"></span><span>  </span><span class="hs-keyword">else</span><span> </span><span class="annot"><span class="annottext">String -&gt; SDoc -&gt; a
forall a. HasCallStack =&gt; String -&gt; SDoc -&gt; a
</span><a href="GHC.Utils.Outputable.html#pprPanic"><span class="hs-identifier hs-var">pprPanic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;LocalReg's live-in to graph&quot;</span></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681045790"><span class="hs-identifier hs-var">bid</span></a></span><span> </span><span class="annot"><span class="annottext">SDoc -&gt; SDoc -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#%3C%2B%3E"><span class="hs-operator hs-var">&lt;+&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">CmmLive LocalReg -&gt; SDoc
forall a. Outputable a =&gt; a -&gt; SDoc
</span><a href="GHC.Utils.Outputable.html#ppr"><span class="hs-identifier hs-var">ppr</span></a></span><span> </span><span class="annot"><span class="annottext">CmmLive LocalReg
</span><a href="#local-6989586621681045789"><span class="hs-identifier hs-var">in_fact</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-71"></span><span>
</span><span id="line-72"></span><span id="local-6989586621681045889"><span id="local-6989586621681045890"><span class="annot"><a href="GHC.Cmm.Liveness.html#gen_kill"><span class="hs-identifier hs-type">gen_kill</span></a></span><span>
</span><span id="line-73"></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#DefinerOfRegs"><span class="hs-identifier hs-type">DefinerOfRegs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045890"><span class="hs-identifier hs-type">r</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045889"><span class="hs-identifier hs-type">n</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#UserOfRegs"><span class="hs-identifier hs-type">UserOfRegs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045890"><span class="hs-identifier hs-type">r</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045889"><span class="hs-identifier hs-type">n</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-74"></span><span>    </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="#local-6989586621681045889"><span class="hs-identifier hs-type">n</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-identifier hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045890"><span class="hs-identifier hs-type">r</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-identifier hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045890"><span class="hs-identifier hs-type">r</span></a></span></span></span><span>
</span><span id="line-75"></span><span id="gen_kill"><span class="annot"><span class="annottext">gen_kill :: forall r n.
(DefinerOfRegs r n, UserOfRegs r n) =&gt;
DynFlags -&gt; n -&gt; CmmLive r -&gt; CmmLive r
</span><a href="GHC.Cmm.Liveness.html#gen_kill"><span class="hs-identifier hs-var hs-var">gen_kill</span></a></span></span><span> </span><span id="local-6989586621681045775"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045775"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681045774"><span class="annot"><span class="annottext">n
</span><a href="#local-6989586621681045774"><span class="hs-identifier hs-var">node</span></a></span></span><span> </span><span id="local-6989586621681045773"><span class="annot"><span class="annottext">CmmLive r
</span><a href="#local-6989586621681045773"><span class="hs-identifier hs-var">set</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-76"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621681045772"><span class="annot"><span class="annottext">afterKill :: CmmLive r
</span><a href="#local-6989586621681045772"><span class="hs-identifier hs-var hs-var">afterKill</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags
-&gt; (CmmLive r -&gt; r -&gt; CmmLive r) -&gt; CmmLive r -&gt; n -&gt; CmmLive r
forall r a b.
DefinerOfRegs r a =&gt;
DynFlags -&gt; (b -&gt; r -&gt; b) -&gt; b -&gt; a -&gt; b
</span><a href="GHC.Cmm.Expr.html#foldRegsDefd"><span class="hs-identifier hs-var">foldRegsDefd</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045775"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">CmmLive r -&gt; r -&gt; CmmLive r
forall r. Ord r =&gt; RegSet r -&gt; r -&gt; RegSet r
</span><a href="GHC.Cmm.Expr.html#deleteFromRegSet"><span class="hs-identifier hs-var">deleteFromRegSet</span></a></span><span> </span><span class="annot"><span class="annottext">CmmLive r
</span><a href="#local-6989586621681045773"><span class="hs-identifier hs-var">set</span></a></span><span> </span><span class="annot"><span class="annottext">n
</span><a href="#local-6989586621681045774"><span class="hs-identifier hs-var">node</span></a></span><span>
</span><span id="line-77"></span><span>    </span><span class="hs-keyword">in</span><span> </span><span class="annot"><span class="annottext">DynFlags
-&gt; (CmmLive r -&gt; r -&gt; CmmLive r) -&gt; CmmLive r -&gt; n -&gt; CmmLive r
forall r a b.
UserOfRegs r a =&gt;
DynFlags -&gt; (b -&gt; r -&gt; b) -&gt; b -&gt; a -&gt; b
</span><a href="GHC.Cmm.Expr.html#foldRegsUsed"><span class="hs-identifier hs-var">foldRegsUsed</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045775"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">CmmLive r -&gt; r -&gt; CmmLive r
forall r. Ord r =&gt; RegSet r -&gt; r -&gt; RegSet r
</span><a href="GHC.Cmm.Expr.html#extendRegSet"><span class="hs-identifier hs-var">extendRegSet</span></a></span><span> </span><span class="annot"><span class="annottext">CmmLive r
</span><a href="#local-6989586621681045772"><span class="hs-identifier hs-var">afterKill</span></a></span><span> </span><span class="annot"><span class="annottext">n
</span><a href="#local-6989586621681045774"><span class="hs-identifier hs-var">node</span></a></span><span>
</span><span id="line-78"></span><span class="hs-pragma">{-# INLINE</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#gen_kill"><span class="hs-pragma hs-type">gen_kill</span></a></span><span> </span><span class="hs-pragma">#-}</span><span>
</span><span id="line-79"></span><span>
</span><span id="line-80"></span><span class="annot"><a href="GHC.Cmm.Liveness.html#xferLive"><span class="hs-identifier hs-type">xferLive</span></a></span><span>
</span><span id="line-81"></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="hs-keyword">forall</span><span> </span><span id="local-6989586621681045908"><span class="annot"><a href="#local-6989586621681045908"><span class="hs-identifier hs-type">r</span></a></span></span><span class="hs-operator">.</span><span>
</span><span id="line-82"></span><span>       </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#UserOfRegs"><span class="hs-identifier hs-type">UserOfRegs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045908"><span class="hs-identifier hs-type">r</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-83"></span><span>       </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#DefinerOfRegs"><span class="hs-identifier hs-type">DefinerOfRegs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045908"><span class="hs-identifier hs-type">r</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-84"></span><span>       </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#UserOfRegs"><span class="hs-identifier hs-type">UserOfRegs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045908"><span class="hs-identifier hs-type">r</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-85"></span><span>       </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#DefinerOfRegs"><span class="hs-identifier hs-type">DefinerOfRegs</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045908"><span class="hs-identifier hs-type">r</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-86"></span><span>       </span><span class="hs-special">)</span><span>
</span><span id="line-87"></span><span>    </span><span class="hs-glyph">=&gt;</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.html#TransferFun"><span class="hs-identifier hs-type">TransferFun</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-identifier hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="#local-6989586621681045908"><span class="hs-identifier hs-type">r</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-88"></span><span id="xferLive"><span class="annot"><span class="annottext">xferLive :: forall r.
(UserOfRegs r (CmmNode O O), DefinerOfRegs r (CmmNode O O),
 UserOfRegs r (CmmNode O C), DefinerOfRegs r (CmmNode O C)) =&gt;
DynFlags -&gt; TransferFun (CmmLive r)
</span><a href="GHC.Cmm.Liveness.html#xferLive"><span class="hs-identifier hs-var hs-var">xferLive</span></a></span></span><span> </span><span id="local-6989586621681045761"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045761"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#BlockCC"><span class="hs-identifier hs-type">BlockCC</span></a></span><span> </span><span id="local-6989586621681045748"><span class="annot"><span class="annottext">CmmNode C O
</span><a href="#local-6989586621681045748"><span class="hs-identifier hs-var">eNode</span></a></span></span><span> </span><span id="local-6989586621681045747"><span class="annot"><span class="annottext">Block CmmNode O O
</span><a href="#local-6989586621681045747"><span class="hs-identifier hs-var">middle</span></a></span></span><span> </span><span id="local-6989586621681045746"><span class="annot"><span class="annottext">CmmNode O C
</span><a href="#local-6989586621681045746"><span class="hs-identifier hs-var">xNode</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681045745"><span class="annot"><span class="annottext">FactBase (CmmLive r)
</span><a href="#local-6989586621681045745"><span class="hs-identifier hs-var">fBase</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-89"></span><span>    </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681045744"><span class="annot"><span class="annottext">joined :: CmmLive r
</span><a href="#local-6989586621681045744"><span class="hs-identifier hs-var hs-var">joined</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; CmmNode O C -&gt; CmmLive r -&gt; CmmLive r
forall r n.
(DefinerOfRegs r n, UserOfRegs r n) =&gt;
DynFlags -&gt; n -&gt; CmmLive r -&gt; CmmLive r
</span><a href="GHC.Cmm.Liveness.html#gen_kill"><span class="hs-identifier hs-var">gen_kill</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045761"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O C
</span><a href="#local-6989586621681045746"><span class="hs-identifier hs-var">xNode</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmLive r -&gt; CmmLive r) -&gt; CmmLive r -&gt; CmmLive r
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24%21"><span class="hs-operator hs-var">$!</span></a></span><span> </span><span class="annot"><span class="annottext">DataflowLattice (CmmLive r)
-&gt; CmmNode O C -&gt; FactBase (CmmLive r) -&gt; CmmLive r
forall (n :: Extensibility -&gt; Extensibility -&gt; *) f
       (e :: Extensibility).
NonLocal n =&gt;
DataflowLattice f -&gt; n e C -&gt; FactBase f -&gt; f
</span><a href="GHC.Cmm.Dataflow.html#joinOutFacts"><span class="hs-identifier hs-var">joinOutFacts</span></a></span><span> </span><span class="annot"><span class="annottext">DataflowLattice (CmmLive r)
forall r. Ord r =&gt; DataflowLattice (CmmLive r)
</span><a href="GHC.Cmm.Liveness.html#liveLattice"><span class="hs-identifier hs-var">liveLattice</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O C
</span><a href="#local-6989586621681045746"><span class="hs-identifier hs-var">xNode</span></a></span><span> </span><span class="annot"><span class="annottext">FactBase (CmmLive r)
</span><a href="#local-6989586621681045745"><span class="hs-identifier hs-var">fBase</span></a></span><span>
</span><span id="line-90"></span><span>        </span><span class="hs-glyph">!</span><span id="local-6989586621681045741"><span class="annot"><span class="annottext">result :: CmmLive r
</span><a href="#local-6989586621681045741"><span class="hs-identifier hs-var hs-var">result</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(CmmNode O O -&gt; CmmLive r -&gt; CmmLive r)
-&gt; Block CmmNode O O -&gt; CmmLive r -&gt; CmmLive r
forall f. (CmmNode O O -&gt; f -&gt; f) -&gt; Block CmmNode O O -&gt; f -&gt; f
</span><a href="GHC.Cmm.Dataflow.html#foldNodesBwdOO"><span class="hs-identifier hs-var">foldNodesBwdOO</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">DynFlags -&gt; CmmNode O O -&gt; CmmLive r -&gt; CmmLive r
forall r n.
(DefinerOfRegs r n, UserOfRegs r n) =&gt;
DynFlags -&gt; n -&gt; CmmLive r -&gt; CmmLive r
</span><a href="GHC.Cmm.Liveness.html#gen_kill"><span class="hs-identifier hs-var">gen_kill</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681045761"><span class="hs-identifier hs-var">dflags</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Block CmmNode O O
</span><a href="#local-6989586621681045747"><span class="hs-identifier hs-var">middle</span></a></span><span> </span><span class="annot"><span class="annottext">CmmLive r
</span><a href="#local-6989586621681045744"><span class="hs-identifier hs-var">joined</span></a></span><span>
</span><span id="line-91"></span><span>    </span><span class="hs-keyword">in</span><span> </span><span class="annot"><span class="annottext">KeyOf LabelMap -&gt; CmmLive r -&gt; FactBase (CmmLive r)
forall (map :: * -&gt; *) a. IsMap map =&gt; KeyOf map -&gt; a -&gt; map a
</span><a href="GHC.Cmm.Dataflow.Collections.html#mapSingleton"><span class="hs-identifier hs-var">mapSingleton</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmNode C O -&gt; BlockId
forall (thing :: Extensibility -&gt; Extensibility -&gt; *)
       (x :: Extensibility).
NonLocal thing =&gt;
thing C x -&gt; BlockId
</span><a href="GHC.Cmm.Dataflow.Graph.html#entryLabel"><span class="hs-identifier hs-var">entryLabel</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode C O
</span><a href="#local-6989586621681045748"><span class="hs-identifier hs-var">eNode</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmLive r
</span><a href="#local-6989586621681045741"><span class="hs-identifier hs-var">result</span></a></span><span>
</span><span id="line-92"></span><span class="hs-pragma">{-# SPECIALIZE</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#xferLive"><span class="hs-pragma hs-type">xferLive</span></a></span><span> </span><span class="hs-pragma">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-pragma hs-type">DynFlags</span></a></span><span> </span><span class="hs-pragma">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.html#TransferFun"><span class="hs-pragma hs-type">TransferFun</span></a></span><span> </span><span class="hs-pragma">(</span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-pragma hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#LocalReg"><span class="hs-pragma hs-type">LocalReg</span></a></span><span class="hs-pragma">)</span><span> </span><span class="hs-pragma">#-}</span><span>
</span><span id="line-93"></span><span class="hs-pragma">{-# SPECIALIZE</span><span> </span><span class="annot"><a href="GHC.Cmm.Liveness.html#xferLive"><span class="hs-pragma hs-type">xferLive</span></a></span><span> </span><span class="hs-pragma">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-pragma hs-type">DynFlags</span></a></span><span> </span><span class="hs-pragma">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.html#TransferFun"><span class="hs-pragma hs-type">TransferFun</span></a></span><span> </span><span class="hs-pragma">(</span><span class="annot"><a href="GHC.Cmm.Liveness.html#CmmLive"><span class="hs-pragma hs-type">CmmLive</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-pragma hs-type">GlobalReg</span></a></span><span class="hs-pragma">)</span><span> </span><span class="hs-pragma">#-}</span><span>
</span><span id="line-94"></span></pre></body></html>